package com.bdjk.bdmw.InfoGath.communication.protocol.heremi;

import java.util.regex.Pattern;

import com.bdjk.bdmw.InfoGath.business.heremi.vo.HereMiPositionVO;
import com.bdjk.bdmw.InfoGath.communication.protocol.BaseProtocol;


/**
 * @author hy
 *
 */



public class HereMiPositionProtocol extends BaseProtocol<HereMiPositionVO>{

	public HereMiPositionProtocol() {
		this.isResponse = false;
		this.isSave=true;
	}
	
	@Override
	public String encodeMessage(HereMiPositionVO model) {
		return null;
	}

	@Override
	public HereMiPositionVO decodeMessage(String message) {
		HereMiPositionVO vo=new HereMiPositionVO();
		message=message.substring(3);
		int TerIdent=message.indexOf("*");
		String terIdent=message.substring(0,TerIdent);
		vo.setTerIdent(terIdent);
		message=message.substring(TerIdent+1);
		int startPro=message.indexOf("*");
		int endPro=message.indexOf(",");
		String proCode=message.substring(startPro+1,endPro);
		message=message.substring(endPro);
		Pattern pattern=Pattern.compile(",*,");
		String[] strs=pattern.split(message);
		vo.setProCode(proCode);
		// 终端发送时间
		StringBuffer st=new StringBuffer("20");
		st.append(strs[1].substring(4)+"-"+strs[1].substring(2,4)+"-"+strs[1].substring(0,2)+" "+strs[2].substring(0,2)+":"+strs[2].substring(2,4)+":"+strs[2].substring(4));
		vo.setSendTime(st.toString());
		// 是否定位
		vo.setIsEchoLocation(strs[3]);
		// 经度
		vo.setLongitude(strs[6]);
		// 纬度
		vo.setLatitude(strs[4]);
		// 速度
		vo.setSpeed(strs[8]);
		// 方向
		vo.setDirection(strs[9]);
		// 海拔
		vo.setAltitude(strs[10]);
		// 卫星数量
		vo.setSatelliteNum(strs[11]);
		// gsm型号强度
		vo.setGsmSignStrength(strs[12]);
		// 电量
		vo.setElectricity(strs[13]);
		// 记步数
		vo.setStepNum(strs[14]);
		// 翻滚数
		vo.setRollNum(strs[15]);
		// 终端状态
		// 01：sos报警   02：蓝牙端口报警   04：出围栏报警   08：低电量报警   10：取手环报警
		vo.setTerStatus(strs[16]);
		// 基站个数
		vo.setBaseStationNum(strs[17]);
		// 连接基站GSM时延（不太懂这个属性含义）
		vo.setConnBs(strs[18]);
		// MCC国家码
		vo.setMccCode(strs[19]);
		// MNC网号
		vo.setMncCode(strs[20]);
		// 连接基站区域号
		vo.setAreaCode(strs[21]);
		// 连接基站编号
		vo.setConnBsCode(strs[22]);
		// 连接基站信号强度
		vo.setConnBsStrength(strs[23]);
		this.terIdent=vo.getTerIdent();
		return vo;
	}

	/*@Override
	public boolean verify(String message) {
		// TODO Auto-generated method stub
		//message="HM*8800050015*0087*UD,220414,134652,A,22.571707,N,113.8613968,E,0.1,0.0,100,7,60,90,1000,50,0000,4,1,460,0,9360,4082,131,9360,4092,148,9360,4091,143,9360,4153,141";
				Pattern p;
				Matcher m;
				boolean label;
				
				//检验设备号是否达标,默认设备号是10位,且10位都是数字
				p=Pattern.compile("HM\\*[0-9]{10}\\*[0-9A-Fa-f]*\\*(UD|LOWBAT|MONITOR),.*");
				m=p.matcher(message);
				label=m.matches();
				if(!label){
					System.out.println("输入的协议不符合规则");
					return label;
				}
				
				//检验长度是否达标
				String prefixstr="";
				String lenstr="";
				String suffixstr="";
				p=Pattern.compile("HM\\*[0-9]{10}\\*[0-9A-Fa-f]{4}\\*");
				m=p.matcher(message);while(m.find()){
					prefixstr=m.group();
				}
				suffixstr=message.substring(prefixstr.length());
				p=Pattern.compile("\\*[0-9A-Fa-f]{4}\\*");
				m=p.matcher(prefixstr);
				while(m.find()){
					lenstr=m.group();
					lenstr=lenstr.substring(1,lenstr.length()-1);
				}
				//System.out.println("full string: "+message);
				//System.out.println("prefix string: "+prefixstr);
				//System.out.println("len string: "+lenstr);
				//System.out.println("suffix string: "+suffixstr);
				//int x=message.length()-prefixstr.length();
				//System.out.println("length:"+Integer.parseInt(lenstr,16)+" ..... "+suffixstr.length()+"  .....  "+x);
				if(message.length()-prefixstr.length()!=Integer.parseInt(lenstr)){
					label=false;
					System.out.println("输入的协议长度不合法");
				}
				return label;
	}*/

	
	
}
